import axios from 'axios';
import constants from '../common/constents.js';
import catchUtil from '../utils/catchUtil.js';

// 配置 axios
const service = axios.create({
  // 基础配置
  baseURL: constants.HTTP_CONFIG.baseUrl,
  timeout: constants.HTTP_CONFIG.timeout,

  // 其他配置
});

// 设置请求拦截
service.interceptors.request.use(config => {
  // 设置 token
  const userInfo = catchUtil.getLocalStorage('userInfo');

  if (userInfo && userInfo.token) {
    // 设置 token 权限
    config.headers.Authorization = userInfo.token;
  }

  return config;
});

// 设置响应拦截
service.interceptors.response.use(response => {
  const data = response.data;

  if (data.code === 2) {
    uni.navigateTo({
      url: '/login'
    });
    uni.$emit('onError', data.msg);
    return data;
  }

  return response.data;
}, error => {
  if (error && error.response) {
    console.log('我出错了');

    switch (error.response.status) {
      case 400:
        error.message = '错误请求';
        break;
      case 401:
        error.message = '未授权，请重新登录';
        break;
      case 403:
        error.message = '拒绝访问';
        break;
      case 404:
        error.message = '请求错误，未找到该资源';
        uni.navigateTo({
          url: '/NotFound'
        });
        break;
      case 405:
        error.message = '请求方法未被允许';
        break;
      case 408:
        error.message = '请求超时';
        break;
      case 500:
        error.message = '服务器开小差了，请稍后再试！';
        break;
      case 501:
        error.message = '网络未实现';
        break;
      case 502:
        error.message = '网络错误';
        break;
      case 503:
        error.message = '服务不可用';
        break;
      case 504:
        error.message = '网络超时';
        break;
      case 505:
        error.message = 'http 版本不支持该请求';
        break;
      default:
        error.message = `连接错误${error.response.status}`;
        break;
    }
  }

  if (error.message.includes('timeout')) {
    error.message = '请求超时，请稍后再试！';
  }

  return Promise.reject(error.message);
});

export default service;